<?php
/**
 * Klasse zum splitten von zusammenhaengenden Queries in ein Query-Array
 * Beachtet_INSERT, CREATE, DROP DELETE Queries
 * Fehlerhafte Interpretierung bei UPDATE wegen "ON UPDATE"-Befehl
 * Zur Erweiterung der Erkennung preg_match_all(...) anpassen
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2010 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Class Yapary_Database_QuerySplitter
{
	private $query		  = NULL;


	function __construct ()
	{
	}


	/**
	 * Trennt eine Reihe von Queries in einzelne Queries auf
	 * @string $query	: zu trennender Query
	 * @return array()
	 * */
	public function getList ($_query)
	{
		$arrResult = array();
		$arrResult2 = array();

		$_query = preg_replace('/\/\*.*\*\/\;/', '', $_query); // Kommentare entfernen

		$queryCreate1 	= 'CREATE\s*TABLE';
		$queryCreate2 	= 'CREATE\s*DATABASE';
		$queryInsert 	= 'INSERT\s*INTO';
		$queryDrop1   	= 'DROP\s*TABLE';
		$queryDrop2		= 'DROP\s*DATABASE';
		$queryDelete 	= 'DELETE\s*(\*|(\w*|\s|,)*)\s*FROM';
		preg_match_all("/($queryCreate1|$queryCreate2|$queryInsert|$queryDrop1|$queryDrop2|$queryDelete)/ims", $_query, $arrStart, PREG_OFFSET_CAPTURE);

		$count = count($arrStart[0]);

		if ($count >= 1 ) {
			foreach ($arrStart[0] as $key => $arrTmp) {
				$posStart1 = NULL;
				$posStart2 = NULL;

				$posStart1 = $arrTmp[1];
				if ($key+1 >= $count){ // Bei Dokumentenende
					$posStart2 = strlen($_query);
				} else {
					$posStart2 = $arrStart[0][$key+1][1];
				}

				$arrResult[] = substr($_query, $posStart1, $posStart2-$posStart1);
			}
		}

		// Feintuning (Alle Zeichen nach Semikolon entfernen)
		foreach ($arrResult as $key => $val) {
			$arrResult[$key] = substr($val, 0, strrpos($val, ';')+1);
		}

		// Leere Queries entfernen
		foreach ($arrResult as $key => $val) {
			if ($arrResult[$key] != '') {
				$arrResult2[] = $arrResult[$key];
			}
		}


		return $arrResult2;
	}

}


?>